package com.along.game.dao.impl;

import javax.annotation.Resource;

import org.springframework.stereotype.Repository;

import com.along.framework.dao.base.IBaseDao;
import com.along.game.dao.InitGameDAO;
import com.along.game.model.Bigpic;
import com.along.game.model.Gamescene;
import com.along.game.model.InitDeskinfo;
import com.along.game.model.OnlineUser;
import com.along.game.model.SmallStateinfo;

@Repository("initGameDAO")
public class InitGameDAOImpl implements InitGameDAO{
	
	@Resource(name="baseDao")
	private IBaseDao<OnlineUser,Long> onlineuserdao;
	
	@Resource(name="baseDao")
	private IBaseDao<InitDeskinfo,Long> initdeskInfodao;
	
	@Resource(name="baseDao")
	private IBaseDao<SmallStateinfo,Long> initsmalldao;
	
	/**
	 * 保存在线用户
	 * @param onlineUser
	 */
	public int InserOnlineUser(OnlineUser onlineUser)
	{
		StringBuilder sb = new StringBuilder();
		sb.append("insert into online_user (");
		sb.append("USN,FIELD_ID, DESK_ID, DESK_LOCATION, BIG_PIC, SMALLPIC_ID, USER_STATE, HITS,POINTS,USER_GRADENAME,USER_SEX,USER_NAME");
		sb.append(") values(?,?,?,?,?,?,?,?,?,?,?,?)");
		return	onlineuserdao.jdbc().getJdbcTemplate().update(sb.toString(),new Object[]{
		onlineUser.getUsn(),
		onlineUser.getFieldId(),
		onlineUser.getDeskId(),
		onlineUser.getDeskLocation(),
		onlineUser.getBigPic(),
		onlineUser.getSmallpicId(),
		onlineUser.getUserState(),
		onlineUser.getHits(),
		onlineUser.getPoints(),
		onlineUser.getUserGradename(),
		onlineUser.getUserSex(),
		onlineUser.getUserName()});
	}
	
	
	/**
	 * 更新用户的房间
	 * @param onlineUser
	 */
	public void UpdateOnlineUserRoomId(String roomid,String usn)
	{
		
		String sql = "update ONLINE_USER set FIELD_ID=? where usn=?";

		int i =onlineuserdao.jdbc().update(sql,roomid,usn);
		String dd = i+"";
	}
	
	/**
	 * 保存用户到房间的左座位或右座位
	 * @param onlineUser
	 */
	public void SaveRoomInfoByLocalId(String deskid,String position,String usn)
	{
		String sql = "";
		sql = "update ONLINE_USER set DESK_LOCATION=?, DESK_ID=? where usn=?";
		int i =onlineuserdao.jdbc().update(sql,position,deskid,usn);
		String dd = i+"";
	}
	
	/**
	 * 点击“开始”按钮后，更新用户的状态为“开始”状态,1为准备,0为未准备，3为开始
	 * @param onlineUser
	 */
	public int UpdateUserStateStateByUsn(String strState,String usn)
	{
		String sql = "";
		sql = "update ONLINE_USER set USER_STATE=?  where usn=?";
		int i =onlineuserdao.jdbc().update(sql,strState,usn);
		return i;
	}
	
	/**
	 * 一个人玩完游戏后，通知已经玩完游戏
	 * @param onlineUser
	 */
	public int UpdateUserEndStateByUsn(String strEndState,String usn)
	{
		String sql = "";
		sql = "update ONLINE_USER set user_State='0',if_End=? where usn=?";
		int i =onlineuserdao.jdbc().update(sql,strEndState,usn);
		return i;
	}
	
	
	/**
	 * 游戏结束以后，更新用户的状态为0,并设置游戏为结束状态
	 * @param onlineUser
	 */
	public int UpdateUserEndStateByDeskId(String strEndState,String ifEnd, String desk_id)
	{
		String sql = "";
		sql = "update ONLINE_USER set user_State=?,if_End=?  where desk_id=?";
		int i =onlineuserdao.jdbc().update(sql,strEndState,ifEnd,desk_id);
		return i;
	}
	
	/**
	 * 游戏开始时，重设积分等信息
	 * @param onlineUser
	 */
	public int UpdateDeskInit(String deskId)
	{
		String sql = "";
//		sql = "update ONLINE_USER set user_State=?,hits=?, points=?,if_End=? where DESK_ID=?";
//		int i =onlineuserdao.jdbc().getSimplaJdbcTemplate().update(sql,'3',0,0,'0',Integer.parseInt(deskId));
//		
		sql = "update ONLINE_USER set user_State='1',hits=0, points=0,if_End='0' where DESK_ID=?";
		int i =onlineuserdao.jdbc().getSimplaJdbcTemplate().update(sql,Integer.parseInt(deskId));
		return i;
	}
	
	
	/**
	 * 结束一局游戏后，更新用户的状态为“准备”状态,1为开始,0为准备，3为游戏中
	 * @param onlineUser
	 */
	public int UpdateDeskStateStateByDeskId(String strState,String deskId)
	{
		String sql = "";
		sql = "update ONLINE_USER set USER_STATE=?,BIG_PIC=0,HITS=0,IF_END='0' where desk_id=?";
		int i =onlineuserdao.jdbc().update(sql,strState,Integer.parseInt(deskId));
		return i;
	}
	
	
	/**
	 * 结束一局游戏后，更新用户的状态为“准备”状态,1为开始,0为准备，3为游戏中
	 * @param onlineUser
	 */
	public int UpdateDeskStateStateByUsn(String strState,String usn)
	{
		String sql = "";
		sql = "update ONLINE_USER set USER_STATE=?,BIG_PIC=0,HITS=0,IF_END='0',desk_id='0' where usn=?";
		int i =onlineuserdao.jdbc().update(sql,strState,usn);
		return i;
	}
	

	
	/**
	 * 保存初始化的大图片信息
	 * @param initDeskInfo
	 */
	public void InserInitBigPic(InitDeskinfo initDeskInfo)
	{
		StringBuilder sb = new StringBuilder();
		sb.append("insert into init_deskinfo (");
		sb.append("ID,DESK_ID, PICID_ORDER");
		sb.append(") values(SEQ_INIT_DESKINFO_ID.Nextval,"+initDeskInfo.getDeskId()+",'"+initDeskInfo.getPicidOrder()+"')");
		int i = onlineuserdao.jdbc().getJdbcTemplate().update(sb.toString());
		int dd = i;
	}
	
	/**
	 * 保存初始化的小图片信息
	 * @param initSmallInfo
	 */
	public void InserInitSmallPic(SmallStateinfo initSmallInfo)
	{
//		initsmalldao.save(initSmallInfo);
		StringBuilder sb = new StringBuilder();
		sb.append("insert into small_stateinfo (");
		sb.append("ID,DESK_ID, BIGPIC_ID,SMALLPIC_IDS");
		sb.append(") values(SEQ_SMALL_STATEINFO_ID.Nextval,"+initSmallInfo.getDeskId()+","+initSmallInfo.getBigpicId()+",'"+initSmallInfo.getSmallpicIds()+"')");
		int i = onlineuserdao.jdbc().getJdbcTemplate().update(sb.toString());
		int dd = i;
	}
	
	/**
	 * 通过用户usn删除在线用户
	 * @param onlineUser
	 */
	public int DeleteOnlineUserByUsn(String usn)
	{
		String sql = "delete from online_user where usn=?";
		int i = onlineuserdao.jdbc().update(sql, usn);
		return i; 
	}
	
	/**
	 * 根据游戏桌删除一场游戏的初始化的图片
	 * @param onlineUser
	 */
	public void DeleteInitGame(String deskid)
	{
		String sql[] =
		{"delete form init_deskinfo where desk_id="+deskid,
				"delete form small_stateinfo where desk_id="+deskid};
		onlineuserdao.jdbc().batchUpdate(sql);
	}
	
	
	/**
	 * 游戏成功后更新在线用户信息
	 * @param onlineUser
	 */
	public void UpdateUserState(String usn)
	{
		String sql = "update online_user set online_user='0' where usn=?";
		onlineuserdao.jdbc().update(sql, usn);
	}
	
	/**
	 * 游戏成功后更新房间信息
	 * @param onlineUser
	 */
	public void UpdateRoomInfo(String usn)
	{
		String sql = "update GameTable set left_user='',top_user='',right_user='',bottom_user='',room_state='0' where usn=?";
		onlineuserdao.jdbc().update(sql, usn);
	}
	
	/**
	 * 在玩游戏过程中，更新点中找茬数
	 * @param onlineUser
	 */
	public int UpdateHitsCount(String usn)
	{
		String sql = "update online_user set HITS=HITS+1 where usn=?";
		int i = onlineuserdao.jdbc().update(sql,usn);
		return i;
	}
	 
	/**
	 * 游戏成功后更新用户信息(注册表)
	 * @param onlineUser
	 */
	public void UpdateUserInfo(String usn)
	{
		return;
	}
	
	


}
